package com.cmc.cloud.cmclink.doc.service.si;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import com.cmc.cloud.cmclink.doc.entity.BlnoFreightDO;
import com.cmc.cloud.cmclink.doc.vo.blnofreightvo.*;

/**
 * 海运费附加费 Service 接口
 *
 * @author 集运管理员
 */
public interface BlnoFreightService {

    /**
     * 创建海运费附加费
     *
     * @param createReqVO 创建信息
     */
    void createBlnoFreight(@Valid BlnoFreightCreateReqVO createReqVO);

    /**
     * 更新海运费附加费
     *
     * @param updateReqVO 更新信息
     */
    void updateBlnoFreight(@Valid BlnoFreightUpdateReqVO updateReqVO);

    /**
     * 删除海运费附加费
     *
     * @param id 编号
     */
    void deleteBlnoFreight(Long id);

    /**
     * 获得海运费附加费
     *
     * @param id 编号
     * @return 海运费附加费
     */
    BlnoFreightDO getBlnoFreight(Long id);

    /**
     * 获得海运费汇总数据表
     *
     * @param id 提单号id
     * @return 海运费汇总数据表
     */
    BlnoFreightAllRespVO getBlnoAllFreight(Long id);

    /**
     * 获得海运费附加费列表
     *
     * @param ids 编号
     * @return 海运费附加费列表
     */
    List<BlnoFreightDO> getBlnoFreightList(Collection<Long> ids);

    /**
     * 获得海运费附加费列表
     *
     * @param blnoIds blnoId列表
     * @return 海运费附加费列表
     */
    List<BlnoFreightDO> getBlnoFreightByBlnoIdList(Collection<Long> blnoIds);

    /**
     * 获得海运费附加费信息
     *
     * @param blnoId 编号
     * @return 获得海运费附加费信息
     */
    List<BlnoFreightDO> getBlnoFreightByBlnoId(Long blnoId);

    /**
     * 获得海运费提单列表
     *
     * @param reqVO 过滤参数
     * @return 海运费提单列表
     */
    List<BlnoFreightCalRespVO> getBlnoWithFreightList(BlnoFreightCalReqVO reqVO);

    /**
     * 获得多式联运海运费提单列表
     *
     * @param reqVO 过滤参数
     * @return 海运费提单列表
     */
    List<MultiBlnoFreightRespVO> getMultiBlnoInfo(MultiBlnoFreightReqVO reqVO);

    /**
     * 获得海运费提单列表
     *
     * @param ids 过滤参数
     * @return 错误提单号
     */
    Map<Long, String> calForecastFreight(Collection<Long> ids);

    /**
     * 获得海运费提单列表
     *
     * @param ids 过滤参数
     * @return 错误提单号
     */
    Map<Long, String> calOceanFreight(Collection<Long> ids);

    /**
     * 获得海运费提单列表
     *
     * @param ids 过滤参数
     * @return 错误提单号
     */
    Map<Long, String> toAccountFreight(Collection<Long> ids);

}
